﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL.Persistencia;
using DAL.Entity;
using System.Web.Security;
using NewTierra.App_Code;

namespace NewTierra.Pages.Usuarios
{
    public partial class UsuarioConsult : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            base.PageLoad();
            VerificarPerfilEdicao(PerfilUsuario.Administrativo, true);

            if (!IsPostBack)
            {
                PopularGrid();
                populaDropPerfil();
                populaDropCliente();
            }
        }

        #region Popular Dados

        protected void PopularGrid()
        {
            try
            {
                gvUsuarios.DataSource = new UsuarioDAL().ListarTodos();
                gvUsuarios.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void populaDropPerfil()
        {
            try
            {
                UsuarioDAL ud = new UsuarioDAL();

                ddlPerfilUsuario.DataSource =  ud.ObterPerfis();
                ddlPerfilUsuario.DataTextField = "Perfil_tipo";                
                ddlPerfilUsuario.DataValueField = "Perfil_id";                
                ddlPerfilUsuario.DataBind();                

                ddlPerfilUsuarioEdit.DataSource = ud.ObterPerfis();
                ddlPerfilUsuarioEdit.DataTextField = "Perfil_tipo";
                ddlPerfilUsuarioEdit.DataValueField = "Perfil_id";
                ddlPerfilUsuarioEdit.DataBind();

                ddlPerfilUsuario.Items.Insert(0, new ListItem("Selecione...", "0"));
                ddlPerfilUsuarioEdit.Items.Insert(0, new ListItem("Selecione...", "0"));

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        private void populaDropCliente()
        {
            ddlCliente.DataSource = new ClienteDAL().ListarTodos(); 
            ddlCliente.DataTextField = "Cliente_nome";
            ddlCliente.DataValueField = "Cliente_id";
            ddlCliente.DataBind();
            ddlCliente.Items.Insert(0, new ListItem("Selecione...", "0"));


            ddlClienteEdit.DataSource = new ClienteDAL().ListarTodos();
            ddlClienteEdit.DataTextField = "Cliente_nome";            
            ddlClienteEdit.DataValueField = "Cliente_id";            
            ddlClienteEdit.DataBind();
            ddlClienteEdit.Items.Insert(0, new ListItem("Selecione...", "0"));            
        }

        #endregion

        protected void EditarUser_Command(object sender, CommandEventArgs e)
        {
            try
            {
                int myId = Convert.ToInt32(e.CommandArgument);

                var Usuario = new UsuarioDAL().ObterPorId(myId);

                ddlClienteEdit.SelectedValue = Usuario.Cliente_id == null ? "0" : Usuario.Cliente_id.ToString();

                if (Usuario == null)
                    throw new ApplicationException("Erro ao recuperar o usuário!");

                txtNomeUsuarioEdit.Text = Usuario.US_nome;
                txtEmailUsuarioEdit.Text = Usuario.US_email;
                ddlStatusEdit.ClearSelection();
                if ((Usuario.US_status != null) && (Usuario.US_status == true))
                    ddlStatusEdit.Items.FindByValue("true").Selected = true;
                else
                    ddlStatusEdit.Items.FindByValue("false").Selected = true;

                ddlPerfilUsuarioEdit.ClearSelection();
                ddlPerfilUsuarioEdit.Items.FindByValue(Usuario.Perfil_id.ToString()).Selected = true;

                var horario = new HorariosSemanaDAL().ObterPorIdUsuario(Usuario.US_id);

                if (horario != null)
                {
                    txtHorarioInicioEdit.Text = (horario.Horarios_diaInicio == null ? "" : horario.Horarios_diaInicio.ToString());
                    txtHorarioFimEdit.Text = (horario.Horarios_diaFim == null ? "" : horario.Horarios_diaFim.ToString());
                    txtFeriasInicioEdit.Text = (horario.Horarios_feriasInicio == null ? "" : Convert.ToDateTime(horario.Horarios_feriasInicio).ToShortDateString());
                    txtFeriasFimEdit.Text = (horario.Horarios_feriasFim == null ? "" : Convert.ToDateTime(horario.Horarios_feriasFim).ToShortDateString());

                    Usuarios_DiasSemana diasSemana = null;

                    if (horario.DiasSemana_id != null)
                    {
                        diasSemana = new Usuario_DiaSemanaDAL().ObterPorID((int)horario.DiasSemana_id);
                    }

                    if (diasSemana != null)
                    {
                        if ((diasSemana.DiasSemana_dom != null) && (diasSemana.DiasSemana_dom == true)) chkDomEdit.Checked = true;
                        else chkDomEdit.Checked = false;

                        if ((diasSemana.DiasSemana_seg != null) && (diasSemana.DiasSemana_seg == true)) chkSegEdit.Checked = true;
                        else chkSegEdit.Checked = false;

                        if ((diasSemana.DiasSemana_ter != null) && (diasSemana.DiasSemana_ter == true)) chkTerEdit.Checked = true;
                        else chkTerEdit.Checked = false;

                        if ((diasSemana.DiasSemana_qua != null) && (diasSemana.DiasSemana_qua == true)) chkQuaEdit.Checked = true;
                        else chkQuaEdit.Checked = false;

                        if ((diasSemana.DiasSemana_qui != null) && (diasSemana.DiasSemana_qui == true)) chkQuiEdit.Checked = true;
                        else chkQuiEdit.Checked = false;

                        if ((diasSemana.DiasSemana_sex != null) && (diasSemana.DiasSemana_sex == true)) chkSexEdit.Checked = true;
                        else chkSexEdit.Checked = false;

                        if ((diasSemana.DiasSemana_sab != null) && (diasSemana.DiasSemana_sab == true)) chkSabEdit.Checked = true;
                        else chkSabEdit.Checked = false;
                    }
                }
                else
                {
                    chkDomEdit.Checked = false;
                    chkSegEdit.Checked = false;
                    chkTerEdit.Checked = false;
                    chkQuaEdit.Checked = false;
                    chkQuiEdit.Checked = false;
                    chkSexEdit.Checked = false;
                    chkSabEdit.Checked = false;
                }

                hdfUsuario_ID.Value = Usuario.US_id.ToString();

                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "editar", "<script>$('#modalEditar').modal('show');</script>", false);
            }
            catch (Exception)
            {
                throw;
            }

        }

        protected void DeletarUser_Command(object sender, CommandEventArgs e)
        {
            try
            {

                int myId = Convert.ToInt32(e.CommandArgument);

                UsuarioDAL ud = new UsuarioDAL();
                Usuario u = ud.ObterPorId(myId);
                ud.Excluir(u);

                PopularGrid();

                ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Usuário excluído com sucesso.');", true);
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);                
            }            
        }

        protected void btnAddUsuario_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#myModal').modal('show');</script>", false);
        }

        protected void btnSalvarUsuario_Click(object sender, EventArgs e)
        {
            try
            {                                                                                                                        

                Usuario User = new Usuario();
                User.US_nome = txtNomeUsuario.Text;
                User.US_email = txtEmailUsuario.Text;
                User.US_senha = FormsAuthentication.HashPasswordForStoringInConfigFile(txtSenha.Text, "MD5");                                
                User.US_status = Convert.ToBoolean(ddlStatus.SelectedValue);

                if (ddlCliente.SelectedItem.Value == "0")
                    User.Cliente_id = null;
                else
                    User.Cliente_id = Convert.ToInt32(ddlCliente.SelectedItem.Value);

                User.Perfil_id = Convert.ToInt32(ddlPerfilUsuario.SelectedItem.Value);

                Usuarios_DiasSemana DiasSemana = new Usuario_DiaSemanaDAL().Obter
                (
                    chkSegunda.Checked,
                    chkTerca.Checked,
                    chkQuarta.Checked,
                    chkQuinta.Checked,
                    chkSexta.Checked,
                    chkSabado.Checked,
                    chkDomingo.Checked
                );

                if (DiasSemana == null)
                {
                    DiasSemana = new Usuarios_DiasSemana();
                    DiasSemana.DiasSemana_dom = chkDomingo.Checked;
                    DiasSemana.DiasSemana_seg = chkSegunda.Checked;
                    DiasSemana.DiasSemana_ter = chkTerca.Checked;
                    DiasSemana.DiasSemana_qua = chkQuarta.Checked;
                    DiasSemana.DiasSemana_qui = chkQuinta.Checked;
                    DiasSemana.DiasSemana_sex = chkSexta.Checked;
                    DiasSemana.DiasSemana_sab = chkSabado.Checked;
                    var diaSemanaDAL = new Usuario_DiaSemanaDAL();
                    DiasSemana.DiasSemana_id = diaSemanaDAL.Salvar(DiasSemana);
                }

                User.US_id = new UsuarioDAL().Salvar(User);

                Usuarios_Horarios User_Horarios = new Usuarios_Horarios();
                User_Horarios.Horarios_diaInicio = txtHorarioInicio.Text;
                User_Horarios.Horarios_diaFim = txtHorarioFim.Text;
                User_Horarios.DiasSemana_id = DiasSemana.DiasSemana_id;

                if (txtFeriasInicio.Text != "")
                    User_Horarios.Horarios_feriasInicio = Convert.ToDateTime(txtFeriasInicio.Text);
                else
                    User_Horarios.Horarios_feriasInicio = null;

                if (txtFeriasFim.Text != "")
                    User_Horarios.Horarios_feriasFim = Convert.ToDateTime(txtFeriasFim.Text);
                else
                    User_Horarios.Horarios_feriasFim = null;
               
                User_Horarios.US_id = User.US_id;

                new HorariosSemanaDAL().SalvarHorarios(User_Horarios);

                //Response.Redirect("UsuarioConsult.aspx");

                PopularGrid();       

                ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Usuário cadastrado com sucesso.');", true);
            }
            catch (Exception ex)
            {
                if (ex is ApplicationException)
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);
            }
        }

        protected void btnSalvarEdit_Click(object sender, EventArgs e)
        {
            try
            {                              
                //if (ddlPerfilUsuarioEdit.SelectedItem.Value == "0")
                //    throw new ApplicationException("Preencha o campo EMAIL antes de prosseguir!");                

                //if (!txtSenhaEdit.Text.Equals(string.Empty))
                //    if (txtSenhaEdit.Text != txtRepetirSenhaEdit.Text)
                //        throw new ApplicationException("As senhas digitadas não conferem!");               

                int UserID = 0;

                int.TryParse(hdfUsuario_ID.Value, out UserID);

                if (UserID <= 0)
                    throw new ApplicationException("Erro ao recuperar o usuário!");


                Usuario User = new UsuarioDAL().ObterPorId(UserID);

                User.US_nome = txtNomeUsuarioEdit.Text;
                User.US_email = txtEmailUsuarioEdit.Text;
                User.US_status = Convert.ToBoolean(ddlStatusEdit.SelectedValue);
                if (!txtSenhaEdit.Text.Equals(string.Empty))
                    User.US_senha = FormsAuthentication.HashPasswordForStoringInConfigFile(txtSenhaEdit.Text, "MD5");

                User.Perfil_id = Convert.ToInt32(ddlPerfilUsuarioEdit.SelectedItem.Value);

                if (ddlClienteEdit.SelectedItem.Value == "0")
                    User.Cliente_id = null;
                else
                    User.Cliente_id = Convert.ToInt32(ddlClienteEdit.SelectedItem.Value);

                new UsuarioDAL().Atualizar(User);

                HorariosSemanaDAL hsd = new HorariosSemanaDAL();
                Usuario_DiaSemanaDAL udalsem = new Usuario_DiaSemanaDAL();
                Usuarios_Horarios hor = hsd.ObterPorIdUsuario(User.US_id);
                Usuarios_Horarios horarios = new Usuarios_Horarios();

                horarios = new Usuarios_Horarios();
                horarios.Horarios_diaInicio = txtHorarioInicioEdit.Text;
                horarios.Horarios_diaFim = txtHorarioFimEdit.Text;

                if (txtFeriasInicioEdit.Text != "")
                    horarios.Horarios_feriasInicio = Convert.ToDateTime(txtFeriasInicioEdit.Text);
                else
                    horarios.Horarios_feriasInicio = null;

                if (txtFeriasFimEdit.Text != "")
                    horarios.Horarios_feriasFim = Convert.ToDateTime(txtFeriasFimEdit.Text);
                else
                    horarios.Horarios_feriasFim = null;

                horarios.US_id = User.US_id;

                if (hor == null)
                {                                        
                    hsd.SalvarHorarios(horarios);
                }
                else
                {                                  
                    hsd.AtualizaHorarios(horarios);
                }                


                Usuarios_DiasSemana DiasSemana = new Usuarios_DiasSemana();
                DiasSemana.DiasSemana_dom = chkDomEdit.Checked;
                DiasSemana.DiasSemana_seg = chkSegEdit.Checked;
                DiasSemana.DiasSemana_ter = chkTerEdit.Checked;
                DiasSemana.DiasSemana_qua = chkQuaEdit.Checked;
                DiasSemana.DiasSemana_qui = chkQuiEdit.Checked;
                DiasSemana.DiasSemana_sex = chkSexEdit.Checked;
                DiasSemana.DiasSemana_sab = chkSabEdit.Checked;


                if (horarios.DiasSemana_id != null)
                {
                    hsd.AtualizaSemana(DiasSemana);
                }
                else
                {
                    udalsem.Salvar(DiasSemana);
                    hsd.AtualizaIdSemana(horarios.US_id, DiasSemana.DiasSemana_id);                    
                }               

                PopularGrid();                

                ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('Usuário atualizado com sucesso.');", true);

                //ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "none", "<script>$('#modalEditar').modal('show');</script>", false);                
            }
            catch (Exception ex)
            {
                if (ex is ApplicationException)
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "a", "alert('" + ex.Message + "');", true);
            }
        }

        protected void btnFecharEdit_Click(object sender, EventArgs e)
        {
            hdfUsuario_ID.Value = "";
        }

        protected void btnProcurar_Click(object sender, EventArgs e)
        {
            try
            {
                gvUsuarios.DataSource = new UsuarioDAL().ListarPesquisa(txtprocurar.Text);
                gvUsuarios.DataBind();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void MostrarMsg(string Msg)
        {
            ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "call me", "showAutoCloseMessage('" + Msg + "')", true);
        }

        string RetornaDate(string data)
        {
            if (data != "")
            {
                return data;
            }
            else
            {
                return null;
            }

        }

        protected void btnVoltarMenu_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Pages/Index.aspx");
        }

    }
}